From 77a5d00047febe4317518ff31e84e5c37499e4ff Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Tue, 30 Jan 2018 13:57:35 +0100 Subject: [PATCH] wayland: Drop cairo surfaces when withdrawing If a surface is unmapped by the client while gdk is processing updates, (for example Firefox un-mapping its window on Expose events), the windowing backend resources might be lost (for example with Wayland) which can cause a crash in end_paint(). Make sure we drop the cairo surfaces as well when hiding the surface, that will avoid the crash in gdk_surface_impl_wayland_end_paint() when trying to attach the staging cairo surface to a released wl_surface, these will be recreated when needed when the surface becomes visible again and there is no need to keep such buffers around for a surface which is not visible anyway. https://bugzilla.gnome.org/show_bug.cgi?id=793062 --- gdk/wayland/gdksurface-wayland.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c index d91be60e89..dcd9990f63 100644 --- a/gdk/wayland/gdksurface-wayland.c +++ b/gdk/wayland/gdksurface-wayland.c @@ -2530,6 +2530,7 @@ gdk_wayland_surface_hide_surface (GdkSurface *surface) unset_transient_for_exported (surface); _gdk_wayland_surface_clear_saved_size (surface); + drop_cairo_surfaces (surface); impl->pending_commit = FALSE; impl->mapped = FALSE; } @@ -2813,7 +2814,6 @@ gdk_wayland_surface_destroy (GdkSurface *surface, g_return_if_fail (!foreign_destroy); gdk_wayland_surface_hide_surface (surface); - drop_cairo_surfaces (surface); if (surface->parent == NULL) { -- 2.30.2